#include "log_info.h"

LogInfo::LogInfo(const std::string& name, const BT::NodeConfiguration& config, rclcpp::Node* node)
    : BT::SyncActionNode(name, config), node_(node)
{
    // 检查节点指针是否有效
    if (!node_)
    {
        throw std::runtime_error("LogInfo node requires a valid rclcpp::Node pointer");
    }
}

BT::PortsList LogInfo::providedPorts()
{
    // 定义输入端口：message（要输出的日志信息）
    return {BT::InputPort<std::string>("message", "默认日志信息")};
}

BT::NodeStatus LogInfo::tick()
{
    // 获取输入端口的消息内容
    std::string message;
    if (!getInput<std::string>("message", message))
    {
        // 如果未设置消息，使用默认警告信息
        RCLCPP_WARN(node_->get_logger(), "[LogInfo] 未指定日志消息，使用默认值");
        message = "未指定日志消息";
    }

    // 输出INFO级别的日志
    RCLCPP_INFO(node_->get_logger(), "[%s] %s", name().c_str(), message.c_str());

    // 该节点始终返回成功
    return BT::NodeStatus::SUCCESS;
}
